package com.example.innerclass2;

/**
 * 静态内部类习题
 */
public class InnerClassExercise {
    public static void main(String[] args) {
        Test t = new Test();
        Test.Inner r = t.new Inner();//5
        System.out.println(r.a);//5
    }
}

/*
思路分析：
1.在执行这句话的时候Test t = new Test(); 会导致类的加载，因此会去执行Test的构造器，在构造器中创建了一个Inner的对象实例s1 然后将s1.a改成了10
  紧接着就创建了一个Inner的对象实例s2，此时直接输出了s2.a，注意输出的值是5并不是10 导致构造器的部分就结束了
  注意 Inner s1 = new Inner(); s1.a = 10; 这两句代码修改的是s1里的a属性， 而在创建了s2的时候，s2的a属性还是5，因此输出的还是5
  两个是不同的对象
2.接下来就执行了这样一句话，  Test.Inner r = t.new Inner();  这句话的意思就是创建了一个内部类的对象，然后直接输出，因为a属性是public的，因此可以输出，
3.最后输出的结果就是两个5
 */
class Test {//外部类

    public Test() {//构造器
        Inner s1 = new Inner();
        s1.a = 10; // 这里修改的是s1中的a属性，并不会影响s2中的a属性
        Inner s2 = new Inner();
        System.out.println(s2.a); // 这里的s2又是新创建的对象，所以里面的值是5
    }

    class Inner { //内部类，成员内部类
        public int a = 5;
    }
}